/*
 * Created by SharpDevelop.
 * user: Robertux
 * Date: 28/04/2008
 * Time: 11:24
 * 
 * 
 */

using System;
using System.Collections.Generic;
using System.Data;
using MySql.Data.MySqlClient;
using DataLayer;

namespace Inventador
{
	/// <summary>
	/// Description of Precio.
	/// </summary>
	public class Precio
	{
		#region Campos
		
		private int _id;
		private DateTime _fecha;
		private double _valor;
		private Producto _miProducto;
		
		#endregion
		
		#region Propiedades
		
		public int Id
		{
			get { return this._id; }
			set { this._id = value; }
		}
		
		public DateTime Fecha
		{
			get { return this._fecha; }
			set { this._fecha = value; }
		}
		
		public Double Valor
		{
			get { return this._valor; }
			set { this._valor = value; }
		}
		
		public Producto MiProducto
		{
			get { return this._miProducto; }
			set { this._miProducto = value; }
		}
		
		#endregion
		
		#region Metodos
		
		public Precio(int pId, DateTime pFecha, Double pValor, Producto pProd)
		{
			this.Id = pId;
			this.Fecha = pFecha;
			this.Valor = pValor;
			this.MiProducto = pProd;
		}
		
		public void GetFromDb(BaseDatos bdatos)
		{
			bdatos.Conectar();
			MySqlDataReader lector = bdatos.EjecutarConsulta("select * from precio where id = " + this.Id.ToString());
			if(lector.HasRows)
			{
				this.Fecha = Precio.FormatFecha(lector["fecha"].ToString());
				this.Valor = Double.Parse(lector["valor"].ToString());
			}
			bdatos.Desconectar();
		}
		
		public static List<Precio> GetList(BaseDatos bdatos, string condicion)
		{
			bdatos = new BaseDatos();
			List<Precio> lst = new List<Precio>();
			string consulta = "SELECT * FROM precio AS pr";
			if(condicion != "") 
				consulta += " WHERE " + condicion;
			bdatos.Conectar();
			MySqlDataReader lector = bdatos.EjecutarConsulta(consulta);
			if(lector.HasRows)
			{
                		while (lector.Read())
                		{
                			Producto prod = new Producto(int.Parse(lector["producto"].ToString()), null, null, 0, 0, "", 0, null);
                			lst.Add(new Precio(int.Parse(lector["id"].ToString()), Precio.FormatFecha(lector["fecha"].ToString()), Double.Parse(lector["valor"].ToString()), prod));
                		}
			}
			bdatos.Desconectar();
            return lst;
		}
		
		public void Insert(BaseDatos bdatos)
		{
			System.Globalization.NumberFormatInfo nfInfo = new System.Globalization.NumberFormatInfo();
			nfInfo.CurrencyDecimalSeparator=".";
	        	nfInfo.CurrencyGroupSeparator=",";
	        	nfInfo.NumberDecimalSeparator=".";
	        	nfInfo.NumberGroupSeparator=",";
	        	
			bdatos = new BaseDatos();
			bdatos.Conectar();
	            //id, tipo, producto, cantidad, fecha
	            bdatos.EjecutarOperacion("INSERT INTO precio VALUES(" + this.Id.ToString() +
	         ", '" + Precio.FormatFecha(this.Fecha) + 
	         "', " + this.Valor.ToString(nfInfo) +
	         ", " + this.MiProducto.Id.ToString() + " )");
			bdatos.Desconectar();
		}
		
		public void Update(BaseDatos bdatos)
		{
			bdatos = new BaseDatos();
			bdatos.Conectar();
			bdatos.EjecutarOperacion("UPDATE precio SET fecha='" + Precio.FormatFecha(this.Fecha) +
			"', valor=" + this.Valor.ToString() +
			", producto=" + this.MiProducto.Id.ToString() +
                	"' WHERE id=" + this.Id.ToString());
			bdatos.Desconectar();
		}
		
		public void Delete(BaseDatos bdatos)
		{
			bdatos = new BaseDatos();
			bdatos.Conectar();
            		bdatos.EjecutarOperacion("DELETE FROM precio WHERE id=" + this.Id.ToString());
			bdatos.Desconectar();
		}
		
		public static int GetMaxId(BaseDatos bdatos)
		{
			bdatos = new BaseDatos();
			bdatos.Conectar();
			int maxId = bdatos.EjecutarEscalar("SELECT MAX(id) FROM precio");
			bdatos.Desconectar();
			return maxId;
		}
		
		public static DateTime FormatFecha(string fecha)
		{
			string[] foobar = fecha.Split("/".ToCharArray());
			return new DateTime(int.Parse(foobar[2].Substring(0,foobar[2].IndexOf(" ")+1)), int.Parse(foobar[1]), int.Parse(foobar[0]));
		}
		
		public static string FormatFecha(DateTime fecha)
		{
			return fecha.Year.ToString() + "/" + fecha.Month.ToString() + "/" + fecha.Day.ToString();
		}
		
		#endregion
	}
}
